﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.IO;
using System.Diagnostics;

namespace CopyFilesFromM3U
{
    public partial class Principal : Form
    {
        Lista lista;

        public Principal()
        {
            InitializeComponent();
        }

        public void pgrBar_Actualizar(int porcentaje)
        {
            pgrBar.Value = porcentaje;
            lblPorcentaje.Text = porcentaje + "%";
            if (porcentaje == 100)
            {
                lblPorcentaje.Text = "Proceso Completado!";
            }
            pgrBar.Update();
            lblPorcentaje.Update();
            pgrBar.Refresh();
            lblPorcentaje.Refresh();
        }

////////////////////////////////////////////////////////////////////////////////////////////////////
        private void btnLista_Click(object sender, EventArgs e)
        {
            try
            {
                OpenFileDialog openFileDialog1 = new OpenFileDialog();
                openFileDialog1.Filter = "Listas m3u (*.m3u)|*.m3u";
                openFileDialog1.FilterIndex = 2;
                if (openFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    lista = new Lista(openFileDialog1.FileName);
                    txtLista.Text = lista.RutaFull;
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message, "Ha ocurrido un problema", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {
                pgrBar.Value = 0;
                lblPorcentaje.Text = "0%";
            }
        }

////////////////////////////////////////////////////////////////////////////////////////////////////

        private void btnDestino_Click(object sender, EventArgs e)
        {
            try
            {
                string targetPath = "";

                FolderBrowserDialog dialogoRuta = new FolderBrowserDialog();
                if (dialogoRuta.ShowDialog() == DialogResult.OK)
                {
                    targetPath = dialogoRuta.SelectedPath;
                    txtDestino.Text = targetPath;
                }
            }
            catch (Exception ex)
            {

                MessageBox.Show(ex.Message, "Ha ocurrido un problema", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            finally
            {
                pgrBar.Value = 0;
                lblPorcentaje.Text = "0%";
            }
        }
 ////////////////////////////////////////////////////////////////////////////////////////////////////
        private void btnProceso_Click(object sender, EventArgs e)
        {

            Mover(lista.lineas, lista.RutaSF, txtLista.Text, txtDestino.Text);
            txtDestino.Text = "";
            txtLista.Text = "";

        }
////////////////////////////////////////////////////////////////////////////////////////////////////
        public void Mover(List<String> linFich, string rutaLista, string rutaOrigen, string rutaDestino)
        {

            int cantLin = linFich.Count;
            int cont = 0;

            foreach (var cancion in linFich)
            {
                cont = cont + 1;

                if ((cancion[0] != '#') & (Path.GetExtension(cancion) == ".mp3"))
                {
                    pgrBar_Actualizar((cont * 100) / cantLin);

                    string ruta = Path.GetDirectoryName(cancion).ToString();
                    string fileName = Path.GetFileName(cancion);

                    if (ruta[1] != ':')
                    {
                        rutaOrigen = rutaLista + @"\" + Path.GetDirectoryName(cancion);
                    }
                    else
                    {
                        rutaOrigen = Path.GetDirectoryName(cancion);
                    }



                    try
                    {
                        // Creamos la ruta de origen y la de destino.
                        string sourceFile = System.IO.Path.Combine(rutaOrigen, fileName);
                        string destFile = System.IO.Path.Combine(rutaDestino, fileName);

                        // Creamos una nueva carpeta si es necesario
                        if (!System.IO.Directory.Exists(rutaDestino))
                        {
                            System.IO.Directory.CreateDirectory(rutaDestino);
                        }

                        // Copiamos el archivo a la nueva ruta, y si es necesario sustituye 
                        //al existente.
                        System.IO.File.Copy(sourceFile, destFile, true);
                    }
                    catch (Exception e)
                    {
                        
                        MessageBox.Show(e.Message,"Ha ocurrido un problema",MessageBoxButtons.OK,MessageBoxIcon.Error);
                    }
                    
                }
            }


        }

/////////////////////////////////////////////////////////////////////////////////////////

        private void txtLista_TextChanged(object sender, EventArgs e)
        {
            if ((txtLista.Text.Trim() != "") & (txtDestino.Text.Trim() != ""))
            {
                btnProceso.Enabled = true;
            }
            else
                btnProceso.Enabled = false;
        }

        private void txtDestino_TextChanged(object sender, EventArgs e)
        {
            if ((txtLista.Text.Trim() != "") & (txtDestino.Text.Trim() != ""))
            {
                btnProceso.Enabled = true;
            }
            else
                btnProceso.Enabled = false;
        }

        private void lblWinamp_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
        {
            System.Diagnostics.Process.Start("http://www.winamp.com/");
        }

        ////////////////////////////////////////////////////////////////////////////////////////////////////
    }
}
